//n = 5, array = [1, 2, 3, 4, 5]
//n = 6, array = [5, 4, 3, 2, 1, 6]
n = 10, array = [7, 8, 19, 10, 6, 22, 10, 5, 2, 14]
// function solution(n, array) {
//     let max = 0
//     let area
//     let k = n
//     let queue = []
//     let res = []
//     while (k > 0) {
//         for (let i = 0; i < n; i++) {
//             while (queue.length && array[queue[queue.length - 1]] >= array[i]) {
//                 queue.pop()
//             }
//             queue.push(i)
//             if (queue.length && queue[0] <= i - k) {
//                 queue.shift()
//             }
//             if (i >= k - 1) {
//                 res.push(array[queue[0]])
//             }
//         }
//         console.log(queue);
//         //console.log(res);

//         for (let j = 0; j < res.length; j++) {
//             area = res[j] * k
//             if (area > max) {
//                 max = area
//             }
//         }
//         while (queue.length) { queue.pop() }
//         while (res.length) { res.pop() }
//         k--
//     }
//     return max
// }
function solution(n, array) {
    let max = 0;
    for (let k = 1; k <= n; k++) { // 遍历所有可能的k值
        let deque = []; // 双端队列来维护窗口的最小值
        for (let i = 0; i < n; i++) {
            // 保持队列中存储的是当前窗口的最小值索引
            while (deque.length > 0 && array[deque[deque.length - 1]] >= array[i]) {
                deque.pop();
            }
            deque.push(i);

            // 确保队列头部的索引在窗口范围内
            if (deque[0] <= i - k) {
                deque.shift();
            }

            // 当i >= k - 1时，计算面积
            if (i >= k - 1) {
                let minHeight = array[deque[0]]; // 当前窗口的最小值
                let area = k * minHeight; // 计算当前窗口的矩形面积
                max = Math.max(max, area); // 更新最大面积
            }
        }
        console.log(deque);

    }
    return max;
}

console.log(solution(n, array));
